<?php

/* * ****************************************
 * author: longuyvinh.ny@gmail.com
 * date: July 10 2014 
 * local: vae
 * **************************************** */

class UserCreateFormUser extends CFormModel {

    public $username;
    public $displayName;
    public $password;
    public $passwordConfirm;
    public $email;
    public $phone;
    public $company;
    public $street;
    public $city;
    public $region;
    public $zipCode;
    public $countryCode;
    public $ipAddress;

    public static function model($className = __CLASS__) {
        return parent::model($className);
    }

    /**
     * Declares the validation rules.
     * The rules state that username and password are required,
     * and password needs to be authenticated.
     */
    public function rules() {
        return array(
            array('username', 'required', 'message' => Yii::t('text', 'Tên đăng nhập không được rỗng')),
            array('username', 'match', 'pattern' => "/^([a-zA-Z0-9_]*)$/", 'message' => Yii::t('text', 'Tên đăng nhập chỉ nhập chữ cái, chữ số và dấu "_"')),
            array('username', 'length', 'min' => 6, 'max' => 100, 'message' => Yii::t('text', 'Tên đăng nhập dài từ 6-100 ký tự')),
            array('username', 'unique',
                'attributeName' => 'username',
                'className' => 'cms.models.user.User',
                'message' => Yii::t('text', 'Tên đăng nhập đã được đăng ký.')),
            array('email', 'required', 'message' => Yii::t('text', 'Email không được rỗng')),
            array('email', 'email', 'message' => t('text', 'Email không hợp lệ')),
            array('email', 'unique',
                'attributeName' => 'email',
                'className' => 'cms.models.user.User',
                'message' => t('text', 'Email đã được đăng ký')),
            array('password, passwordConfirm', 'required', 'message' => Yii::t('text', 'Password không được rỗng')),
            array('password, passwordConfirm', 'length', 'min' => 6, 'max' => 50),
            array('password',
                'match',
                'not' => false,
                'pattern' => '/[0-9]/',
                'message' => 'Password phải có ít nhất 1 chữ số'),
            array('password',
                'match',
                'not' => false,
                'pattern' => '/[-_!@#$%^&*()+=?.,]/',
                'message' => 'Password phải có ít nhất 1 ký tự đặc biêt: - _ ! @ # $ % ^ & * ( ) + = ? . ,'),
            array('password',
                'match',
                'not' => false,
                'pattern' => '/[A-Z]/',
                'message' => 'Password phải có ít nhất 1 ký tự viết hoa: A, B, C ... Z'),
            array('passwordConfirm', 'compare', 'compareAttribute' => 'password'),
            array('phone', 'required', 'message' => Yii::t('text', 'Phone không được rỗng')),
            array('phone', 'length', 'min' => 8, 'max' => 15),
            array('zipCode', 'length', 'min' => 3, 'max' => 10),
            array('zipCode', 'required', 'message' => Yii::t('text', 'Zipcode không được rỗng')),
            array('city, displayName, company', 'length', 'max' => 100),
            array('city', 'required', 'message' => Yii::t('text', 'City không được rỗng')),
            array('street', 'required', 'message' => Yii::t('text', 'Street không được rỗng')),
            array('countryCode', 'required', 'message' => Yii::t('text', 'countryCode không được rỗng')),
            array('region', 'required', 'message' => Yii::t('text', 'Region không được rỗng')),
            //array('street, countryCode, region', 'required'),
            array('countryCode', 'checkCountry')
        );
    }

    /**
     * Declares attribute labels.
     */
    public function attributeLabels() {
        return array(
            'username' => t('cms', 'Username'),
            'displayName' => t('cms', 'Display Name'),
            'password' => t('cms', 'Password'),
            'passwordConfirm' => t('cms', 'Password Confirm'),
            'email' => t('cms', 'Email Address'),
            'phone' => t('cms', 'Phone'),
            'company' => t('cms', 'Company'),
            'street' => t('cms', 'Street'),
            'city' => t('cms', 'City'),
            'region' => t('cms', 'Region'),
            'zipCode' => t('cms', 'Zip Code'),
            'countryCode' => t('cms', 'Country Code'),
            'ipAddress' => t('cms', 'IP Address'),
        );
    }

    public function checkCountry($attribute, $params) {
        $code = $this->countryCode;
        if (!$this->hasErrors()) {
            $country = Countries::model()->findByAttributes(array('countryCode' => $code));
            if (isset($country)) {
                return true;
            } else {
                $this->addError('countryCode', t('cms', 'Mã quốc gia không hợp lệ'));
                return false;
            }
        }
    }

}
